#include <iostream>
#include <sys/types.h>
#include <cerrno>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string>


int main(int argc, char *argv[])
{

    // 客户端
    // 1.创建套接字，打开网络文件
    int sock = socket(AF_INET, SOCK_DGRAM, 0);
    if (sock < 0)
    {
        std::cout << "socket create error" << errno << std::endl;
        return 1;
    }
    // 客户端需要绑定ip和端口吗
    // 不需要，因为客户端是向服务器端发送数据的，所以不需要，ip和端口号，
    // 发送数据时，操作系统自动绑定


      
    //2.使用服务
    while (1)
    {
        // 给谁发
        struct sockaddr_in sever;
        sever.sin_family = AF_INET;
        sever.sin_port = htons(atoi(argv[2]));
        sever.sin_addr.s_addr = inet_addr(argv[1]);
        // 向服务器发送数据
        std::string message;
        std::cout<<"请输入# ";
        std::cin >> message;
        sendto(sock, message.c_str(), message.size(), 0, (struct sockaddr *)&sever, sizeof(sever));

        // 获取从服务器中返回的数据
        struct sockaddr_in tmp;
        #define NUM 1024
        char buffer[NUM];
        socklen_t len = sizeof(tmp);
        recvfrom(sock, buffer, sizeof(buffer), 0, (struct sockaddr *)&tmp, &len);
        std::cout << "sever返回的数据: " << buffer << std::endl;
    }

    return 0;
}